package com.qys.livesMall.system.service.impl;

import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.qys.livesMall.common.constants.Constants;
import com.qys.livesMall.common.exception.enums.ExceptionEnum;
import com.qys.livesMall.common.message.MessageServer;
import com.qys.livesMall.common.result.R;
import com.qys.livesMall.common.utils.bean.BeanProUtils;
import com.qys.livesMall.framework.view.Paging;
import com.qys.livesMall.framework.view.QysPage;
import com.qys.livesMall.system.model.dto.template.AddTemplate;
import com.qys.livesMall.system.model.dto.template.EditTemplate;
import com.qys.livesMall.system.model.dto.template.TemplateSearch;
import com.qys.livesMall.system.model.entity.template.H2Template;
import com.qys.livesMall.system.model.vo.template.TemplateVO;
import com.qys.livesMall.system.enums.dao.H2TemplateDao;
import com.qys.livesMall.system.enums.SystemMessageEnum;
import com.qys.livesMall.system.mapper.H2TemplateMapper;
import com.qys.livesMall.system.service.H2TemplateService;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.i18n.LocaleContextHolder;
import org.springframework.stereotype.Service;

import java.util.List;


/**
 * <p>
 *  服务实现类
 * </p>
 *
 * @author wzy
 * @since 2023-04-27
 */
@Service
public class H2TemplateServiceImpl extends ServiceImpl<H2TemplateMapper, H2Template> implements H2TemplateService {

    @Autowired
    private H2TemplateMapper templateMapper;

    @Autowired
    private H2TemplateDao h2TemplateDao;

    @Autowired
    private MessageServer messageServer;

    @Override
    public QysPage<TemplateVO> search(TemplateSearch search) {
        search.setDeleted(Constants.YesNoInt.NO);
        Paging<H2Template> page = templateMapper.search(new Paging<>(search));
        return QysPage.to(page, TemplateVO.class);

    }

    @Override
    public R add(AddTemplate addTemplate) {
        if (addTemplate==null){
            return messageServer.failMsg(ExceptionEnum.PARAM_IS_ERROR);//参数错误
        }
        if (StringUtils.isBlank(addTemplate.getType())){
            //模板编码错误
            return messageServer.failMsg(SystemMessageEnum.TEMPLATE_TYPE_ERRORS);
        }
        if (StringUtils.isBlank(addTemplate.getCode())){
            //模板编码错误
            return messageServer.failMsg(SystemMessageEnum.TEMPLATE_CODE_ERRORS);
        }
        //检查模板是否存在
        H2Template template=h2TemplateDao.getByCode(addTemplate.getCode());
        if (template!=null){
            return messageServer.failMsg(SystemMessageEnum.TEMPLATE_CODE_EXISTS);
        }
        template=new H2Template();
        BeanUtils.copyProperties(addTemplate,template);
        template.setStatus(Constants.YesNo.YES);
        template.setDeleted(Constants.YesNoInt.NO);
        h2TemplateDao.save(template);
        return R.ok();

    }

    @Override
    public R edit(EditTemplate editTemplate) {
        if (editTemplate==null){
            return messageServer.failMsg(ExceptionEnum.PARAM_IS_ERROR);//参数错误
        }
        if (editTemplate.getId()==null){
            return messageServer.failMsg(ExceptionEnum.PARAM_IS_ERROR);//参数错误
        }
        //检查模板是否存在
        H2Template template=h2TemplateDao.getById(editTemplate.getId());
        if (template==null){
            return messageServer.failMsg(SystemMessageEnum.TEMPLATE_NOT_EXISTS);//模板不存在
        }
        template.setName(editTemplate.getName());
        template.setTemplate(editTemplate.getTemplate());
        template.setStatus(editTemplate.getStatus());
        h2TemplateDao.updateById(template);
        return R.ok();
    }

    @Override
    public R del(Long id) {
        H2Template template=h2TemplateDao.getById(id);
        if (template==null){
            return messageServer.failMsg(SystemMessageEnum.TEMPLATE_NOT_EXISTS);//模板不存在
        }
        template.setDeleted(Constants.YesNoInt.YES);
        h2TemplateDao.updateById(template);
        return R.ok();
    }

    @Override
    public R onOrOff(Integer id,String status) {
        if (id==null){
            return messageServer.failMsg(ExceptionEnum.PARAM_IS_ERROR);//参数错误
        }
        //检查模板是否存在
        H2Template template=h2TemplateDao.getById(id);
        if (template==null){
            return messageServer.failMsg(SystemMessageEnum.TEMPLATE_NOT_EXISTS);//模板不存在
        }
        template.setStatus(status);
        h2TemplateDao.updateById(template);
        return R.ok();
    }

    @Override
    public String getByCode(String code) {
        H2Template template=h2TemplateDao.getByCode(code);
        if (template==null){
            return null;
        }
        String languageTag = LocaleContextHolder.getLocale().toLanguageTag();
        return languageTag.contains("en") ? template.getEnTemplate() : template.getTemplate();
    }

    @Override
    public List<TemplateVO> listAll(String type) {
        List<H2Template> templates=h2TemplateDao.getByType(type);
        return BeanProUtils.copyListProperties(templates,TemplateVO::new);
    }
}
